// 签到记录页面逻辑
import { getStudentCheckinByHistoryId, getCheckinRecordList } from '../../api/api.js';

Page({
    data: {
        checkinHistoryId: '',
        checkinInfo: {},
        studentCheckins: [],
        stats: {
            total: 0,
            present: 0,
            late: 0,
            absent: 0,
            presentPercent: 0,
            latePercent: 0,
            absentPercent: 0
        },
        loading: true
    },

    onLoad(options) {
        console.log('签到详情页面加载，参数:', options);

        if (options.checkinHistoryId) {
            this.setData({ checkinHistoryId: options.checkinHistoryId });
            console.log('获取到签到历史ID:', options.checkinHistoryId);

            this.loadStudentCheckins(options.checkinHistoryId);
        } else {
            console.error('未获取到签到历史ID参数');
            wx.showToast({
                title: '参数错误',
                icon: 'error'
            });
            setTimeout(() => {
                this.navigateBack();
            }, 1500);
        }
    },

    /**
     * 加载学生签到数据
     */
    loadStudentCheckins(checkinHistoryId) {
        wx.showLoading({ title: '加载中...' });
        console.log('开始请求学生签到数据，ID:', checkinHistoryId);

        // 获取学生签到数据
        getStudentCheckinByHistoryId(checkinHistoryId)
            .then(res => {
                console.log('获取学生签到数据成功:', res);

                // 检查返回数据格式
                if (!res.data || !Array.isArray(res.data)) {
                    console.error('返回数据格式不正确:', res);
                    wx.showToast({
                        title: '数据格式错误',
                        icon: 'error'
                    });
                    this.setData({ loading: false });
                    wx.hideLoading();
                    return;
                }

                if (res.data.length === 0) {
                    console.log('没有学生签到数据');
                }

                // 获取并处理学生签到数据
                const studentCheckins = this.processStudentCheckins(res.data);

                // 计算签到统计
                const stats = this.calculateStats(res.data);

                // 使用第一条记录的信息获取签到基本信息
                const firstRecord = res.data[0] || {};
                let checkinInfo = {
                    checkinName: '未命名签到',
                    startTime: new Date(), // 默认值
                    formattedStartTime: '未知时间'
                };

                // TODO: 如果接口返回签到基本信息，在这里处理

                this.setData({
                    checkinInfo,
                    studentCheckins,
                    stats,
                    loading: false
                });

                wx.hideLoading();
            })
            .catch(err => {
                console.error('获取学生签到数据失败:', err);
                wx.hideLoading();
                wx.showToast({
                    title: '加载失败',
                    icon: 'error'
                });
                this.setData({ loading: false });
            });
    },

    /**
     * 处理学生签到数据
     */
    processStudentCheckins(data) {
        return data.map(item => {
            // 根据状态设置class和显示文本
            let statusClass = 'absent';
            let statusText = '未到';

            if (item.checkinState === 'PRESENT' || item.checkinState === 1) {
                statusClass = 'present';
                statusText = '已到';
            } else if (item.checkinState === 'LATE' || item.checkinState === 2) {
                statusClass = 'late';
                statusText = '迟到';
            }

            // 格式化签到时间
            let formattedCheckinTime = '';
            if (item.checkinTime) {
                formattedCheckinTime = this.formatDateTime(new Date(item.checkinTime));
            }

            return {
                studentId: item.studentId,
                studentName: item.studentName,
                statusClass,
                statusText,
                checkinTime: item.checkinTime,
                formattedCheckinTime
            };
        });
    },

    /**
     * 计算签到统计
     */
    calculateStats(data) {
        const total = data.length;
        let present = 0;
        let late = 0;
        let absent = 0;

        data.forEach(item => {
            if (item.checkinState === 'PRESENT' || item.checkinState === 1) {
                present++;
            } else if (item.checkinState === 'LATE' || item.checkinState === 2) {
                late++;
            } else {
                absent++;
            }
        });

        // 计算百分比，防止除以零
        const totalNonZero = total || 1;
        const presentPercent = (present / totalNonZero) * 100;
        const latePercent = (late / totalNonZero) * 100;
        const absentPercent = (absent / totalNonZero) * 100;

        return {
            total,
            present,
            late,
            absent,
            presentPercent,
            latePercent,
            absentPercent
        };
    },

    /**
     * 格式化日期时间
     */
    formatDateTime(date) {
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        const hours = String(date.getHours()).padStart(2, '0');
        const minutes = String(date.getMinutes()).padStart(2, '0');

        return `${year}-${month}-${day} ${hours}:${minutes}`;
    },

    /**
     * 返回上一页
     */
    navigateBack() {
        wx.navigateBack();
    },

    /**
     * 下拉刷新
     */
    onPullDownRefresh() {
        const { checkinHistoryId } = this.data;
        if (checkinHistoryId) {
            this.loadStudentCheckins(checkinHistoryId);
        }
        wx.stopPullDownRefresh();
    }
});